package com.dy.design_pattern_study.store_cashier_system.strategy.impl;

import com.dy.design_pattern_study.store_cashier_system.strategy.Strategy;

/**
 * @CreateBy zhangdingyi
 * @Date 2023-03-08
 * @Content 维护一个对Strategy对象的引用 -简单的说，这个就是策略模式的接口
 * 策略模式供使用
 */
public class Context {
    Strategy strategy;

    //初始化时传入需要使用的策略
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    //这里返回对应的策略对象
    //这里
    public void ContextInterface() {
        strategy.AlgorithmInterface();
    }

    //具体使用
    public static void main(String[] args) {

        //这里的话，就是创建了算法类，并传入不同的算法方法
        //这里可以通过不同的策略引入不同的对象，来使用不同的方法
        Context context;

        context = new Context(new ConcreteStrategyA());
        context.ContextInterface();

        context = new Context(new ConcreteStrategyB());
        context.ContextInterface();

        context = new Context(new ConcreteStrategyC());
        context.ContextInterface();
    }
}
